package com.loto.graphics;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;

import com.loto.model.Combinaison;
import com.loto.model.CombinaisonModele;



public class FrameListe extends JFrame implements ActionListener{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 5389729749610222613L;
	private CombinaisonModele modeleListe;
	private CombinaisonModele modeleRecherche;
	private JTable table;
	private JTextField date;
	private JTextField date1;
	private JTextField date2;
	private JPanel panPrincipal;
	private JPanel panRecherche;
	private JPanel panListe;
	private JScrollPane p;
	private JPanel panResultat;
	private JButton recherche1Date;
	private JButton recherche2Date;
	private static FrameListe instance;

	public FrameListe() throws IOException{
		super();

		//this.setLocationRelativeTo(null);
		setTitle("LoTo");
		setPreferredSize(new Dimension(1000, 700));
		setMinimumSize(new Dimension(750,550));
		setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
		
		modeleListe = new CombinaisonModele();
		table = new JTable(modeleListe);
		table.setAutoCreateRowSorter(true);
		p = new JScrollPane(table);
		
		panPrincipal = new JPanel(new GridBagLayout());
		panListe = new JPanel(new BorderLayout());
		panRecherche = new JPanel(new GridBagLayout());
		panResultat = new JPanel(new BorderLayout());
		
		//Contraintes pour la creation des tableau qui vont contenir les composants
		GridBagConstraints c1 = new GridBagConstraints();
		GridBagConstraints c = new GridBagConstraints();
		
		panResultat.setMinimumSize(new Dimension(200,200));
		panListe.setMinimumSize(new Dimension(300,300));
		//panListe.setMaximumSize(new Dimension(1000,700));


		// Cadres
	    panListe.setBorder(BorderFactory.createTitledBorder("Liste des combinaisons" ));
	    panRecherche.setBorder(BorderFactory.createTitledBorder("Recherche de combinaisons" ));

		
	    //Ajout du tableau
		panListe.add(p, BorderLayout.CENTER);

	    //ajout des formulaire de recherche
		
	    c1.insets=new Insets(3,3,3,3); //Ajouter une marge entre les composants
	    c1.fill = GridBagConstraints.HORIZONTAL; //on fixe tous les champs a la meme longueur
	    c1.gridy=0; //on spécifie la cellule y
	    c1.gridx=GridBagConstraints.RELATIVE; //et la cellule x
	    c1.weightx=0; //poids que represente ce composant sur la ligne
	    panRecherche.add(new JLabel("Recherche sur une date"),c1);
	    
	    
	    date = new JTextField("");
	    c1.gridwidth=3; //Cette case va s'etaler sur 3 colonnes
		panRecherche.add(date,c1);
	    
		
		recherche1Date = new JButton("Rechercher");
		recherche1Date.addActionListener(this);
		c1.gridwidth=1;
	    c1.weightx=0.3;
		panRecherche.add(recherche1Date,c1);
		
		
		//pour avoir de l'espace a droite du formulaire
		c1.weightx=0.7;
		panRecherche.add(new JLabel(""),c1);
		
		
		//2 eme ligne
		c1.gridy=1;
	    c1.weightx=0.2;
	    panRecherche.add(new JLabel("Recherche entre deux date: du "),c1);
	    
	    date1 = new JTextField();
	    c1.weightx=0.3;
		panRecherche.add(date1,c1);
		
	    c1.weightx=0;
	    panRecherche.add(new JLabel(" au "),c1);
	    
	    date2 = new JTextField();
	    c1.weightx=0.3;
		panRecherche.add(date2,c1);
		
		recherche2Date = new JButton("Rechercher");
		recherche2Date.addActionListener(this);
	    c.weightx=0.2;
		panRecherche.add(recherche2Date,c1);
		
		
		//ajout des panels
		c.ipadx=5;
		c.ipady=5;
	    c.gridx=0;
	    c.weightx=1;
	    c.fill = GridBagConstraints.HORIZONTAL;
	    c.anchor=GridBagConstraints.NORTH;
	    
	    c.gridy=0;
	    c.weighty=0.6;
	    panPrincipal.add(panListe,c);
	    
	    
	    c.gridy=1;
	    c.weighty=0.2;
		panPrincipal.add(panRecherche,c);

		c.gridy=2;
	    c.weighty=0.2;
	    panPrincipal.add(panResultat,c);
		
		this.setContentPane(panPrincipal);
		
		pack();

	}

	public JTextField getDate1() {
		return date1;
	}

	public void setDate1(JTextField date1) {
		this.date1 = date1;
	}

	public JTextField getDate2() {
		return date2;
	}

	public void setDate2(JTextField date2) {
		this.date2 = date2;
	}

	public CombinaisonModele getModeleListe() {
		return modeleListe;
	}

	public CombinaisonModele getModeleRecherche() {
		return modeleRecherche;
	}

	public JTable getTable() {
		return table;
	}

	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		boolean arreter=false;
		Object source = e.getSource();
		List<Combinaison> combinaisons= new ArrayList<Combinaison>();
	    panResultat.setBorder(BorderFactory.createTitledBorder("Resultat de la recherche" ));
	    
	    
		if(source==recherche1Date) {
			//On teste si les champs ne sont pas vide
			if(date.getText().equals("")) { 
				panResultat.removeAll();
				panResultat.add(new JLabel("Veuillez entrer une date"));
				panResultat.revalidate();
				arreter=true;
			}
			//On recupere les resultats
			else combinaisons = modeleListe.getCombinaisonByDate(date.getText());
		}
		
		else if(source==recherche2Date) {
			//On teste si les champs ne sont pas vide
			if(date1.getText().equals("") || date2.getText().equals("")) { 
				panResultat.removeAll();
				panResultat.add(new JLabel("Veuillez entrer une date"));
				panResultat.revalidate();
				arreter=true;
			}
			else combinaisons = modeleListe.getCombinaisonByDate(date1.getText(),date2.getText());
		}
		
		//Si le format n'est pas le bon
		if(combinaisons==null && !arreter) {
			panResultat.removeAll();
			panResultat.add(new JLabel(modeleListe.message));
			panResultat.revalidate();
		}
		
		//Si des résultats ont été trouvé
		else if((combinaisons.size()) > 0 && !arreter) {
				
				try {
					modeleRecherche = new CombinaisonModele(combinaisons);
					
					panResultat.removeAll();
					table = new JTable(modeleRecherche);
					table.setAutoCreateRowSorter(true);
					panResultat.add(new JScrollPane(table));
					panResultat.revalidate();
					
				
				} catch (IOException o) {
					o.printStackTrace();
				}
			}
		
			//Si aucun résultat n'a été trouvé
			else if((combinaisons.size()) == 0 && !arreter){
				panResultat.removeAll();
				panResultat.add(new JLabel("Pas de résultat"));
				panResultat.revalidate();
			}
		
		
	}
	public static FrameListe getInstance() throws IOException{
		if(instance==null){
			instance = new FrameListe();
		}
		return instance;
	}
	
}
